package model.fantasmas;

import java.util.List;
import model.Laberinto;
import model.movimiento.*;
import model.posicion.Posicion;


public class Blinky extends Fantasma {
	
	Posicion posInicial;
	
	public Blinky(Posicion posicion, Laberinto elLaberinto, int velocidad) {
		super(posicion,elLaberinto, velocidad);
		this.posInicial=posicion;
	}

	@Override
	public Movimientos elegirDireccion(List<Movimientos> movimientos,Posicion pacmanPosicion) {		
		if(movimientos.size()==1)
			return movimientos.get(0);//esto es porque estaria en un rincon y solo le queda ir al unico lugar que qeuda
		
		
		if(this.isComible())return elegirDireccionComible(movimientos, pacmanPosicion);
			else return elegirDireccionNoComible(movimientos, pacmanPosicion);
	}

	private Movimientos elegirDireccionComible(List<Movimientos> movimientos,
			Posicion pacmanPosicion) {
		
		if(interseccion(movimientos,this.getDireccion())){			
			if( (pacmanPosicion.getPosY()-this.getPosicion().getPosY()>0) && (this.sePuede(movimientos,new MovimientoArriba())) ) 
				return new MovimientoArriba();
			if( (pacmanPosicion.getPosX()-this.getPosicion().getPosX()>0) && (this.sePuede(movimientos,new MovimientoIzquierda())) ) 
				return new MovimientoIzquierda();
			if( (pacmanPosicion.getPosX()-this.getPosicion().getPosX()<0) && (this.sePuede(movimientos,new MovimientoDerecha())) ) 
				return new MovimientoDerecha();
			if( (pacmanPosicion.getPosY()-this.getPosicion().getPosY()<0) && (this.sePuede(movimientos,new MovimientoAbajo())) ) 
				return new MovimientoAbajo();
			return movimientos.get(0);//si pacman esta en una direccion inaccesible se mueve a el primer lugar devuelto en el arreglo
		}
		else
			return this.getDireccion();
	}

	private Movimientos elegirDireccionNoComible(List<Movimientos> movimientos,
			Posicion pacmanPosicion) {
		if(this.interseccion(movimientos,this.getDireccion())){			
			if( (pacmanPosicion.getPosY()-this.getPosicion().getPosY()>0) && (this.sePuede(movimientos,new MovimientoAbajo()))) 
				return new MovimientoAbajo();
			if( (pacmanPosicion.getPosY()-this.getPosicion().getPosY()<0) && (this.sePuede(movimientos,new MovimientoArriba()))) 
				return new MovimientoArriba();
			if( (pacmanPosicion.getPosX()-this.getPosicion().getPosX()>0) && (this.sePuede(movimientos,new MovimientoDerecha()))) 
				return new MovimientoDerecha();
			if( (pacmanPosicion.getPosX()-this.getPosicion().getPosX()<0) && (this.sePuede(movimientos,new MovimientoIzquierda())) ) 
				return new MovimientoIzquierda();
			return movimientos.get(0);//si pacman esta en una direccion inaccesible se mueve a el primer lugar devuelto en el arreglo
		}
		else
			return this.getDireccion();
	}

	

	


}
